package com.cx.mall.user.controller;

import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.cx.mall.common.entity.user.entity.UserInfo;
import com.cx.mall.common.entity.user.model.UserLogin;
import com.cx.mall.common.util.JWTUtils;
import com.cx.mall.common.util.ResponseVo;
import com.cx.mall.user.service.IUserInfoService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 后台用户表 前端控制器
 * </p>
 *
 * @author zs
 * @since 2025-08-07
 */
@Slf4j
@RestController
public class UserInfoController {
    /*
    * 注册，登录，查询商品，加入购物车，下单，支付
    *      登录：传token
    *           查询商品：分类查询，商品详情查询，分页查询
    *           加入购物车：传商品id，数量，加入购物车，添加到mongodb数据库
    *           下单：传购物车id，订单信息，生成订单，添加到mysql数据库
    *           支付：沙盒支付
    *
    *      请求路径：
    *      请求方式：
    *      请求参数：
    *      响应参数：
    *      响应示例数据：
    *
    * */
    @Autowired
    private IUserInfoService userInfoService;

    /**
     * @RequestBody  接收json数据,将json数据封装到对象中
     * @Validated 校验参数
     * @param userInfo
     * @return
     */

    @PostMapping("/user/register")
    public ResponseVo<UserInfo> register(@RequestBody @Validated UserInfo userInfo) {

        ResponseVo<UserInfo> responseVo = userInfoService.register(userInfo);
        return responseVo;
    }

    @PostMapping("/login")
    public ResponseVo<UserInfo> login(@RequestBody UserLogin userLogin, HttpServletResponse response) {
        UserInfo userInfo = userInfoService.login(userLogin.getUsername(), userLogin.getPassword());
        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", userInfo.getId());
        claims.put("username", userInfo.getUsername());
        claims.put("nickName", userInfo.getNickName());
        claims.put("email", userInfo.getEmail());
        //添加token
        String token =  JWTUtils.generateToken(claims);
        response.setHeader("authorization", token);
        log.info("用户登录成功，token为：{}",token);
        return ResponseVo.success(userInfo);
    }

}
